30 DATA ARTICLE TITLE,VOLUME NUMBER,ISSUE NUMBER,PAGE NUMBER,CATEGORY,COMMENTS
40 TEXT : NORMAL : SPEED= 255:D$ = CHR$(4):G$ = CHR$(7)
43 IF PEEK(768) = 29 THEN 100
45 HOME :X$ = " ": INVERSE :M = -1
50 FOR CC = 19 TO 1 STEP -1:M = M +2: VTAB 1: HTAB CC: PRINT X$: VTAB 1: HTAB CC +M: PRINT X$
55 VTAB 23: HTAB CC: PRINT X$: VTAB 23: HTAB CC +M: PRINT X$: NEXT
56 M = 24: FOR CC = 1 TO 12:M = M -2: VTAB CC: HTAB 1: PRINT X$: VTAB CC: HTAB 39: PRINT X$: VTAB CC +M: HTAB 1: PRINT X$: VTAB CC +M: HTAB 39: PRINT X$: NEXT : NORMAL
57 VTAB 5: HTAB 11: INVERSE : PRINT "A P P L E M. A. T.": NORMAL
140 VTAB 23: PRINT "WHICH OPTION WOULD YOU LIKE ?";
150 GET A$:A = VAL(A$): IF A <1 OR A >8 THEN 150
155 ON A GOSUB 1000,2000,3000,4000,5000,6000,7000,59999
160 GOTO 100
200 FL = 0: IF MN$ = "" THEN FL = 1
210 IF DA$(1) = "" THEN FL = 1
220 IF NU = 0 THEN FL = 1
230 IF FL = 1 THEN HOME : GOSUB 2010
240 IF LEN(MN$) = 0 THEN POP : RETURN
250 RETURN
1000 HOME :A$ = "INITIALIZE FILES": GOSUB 60000: PRINT : PRINT : PRINT "ENTER THE HEADINGS FOR THE DATA BASE:"
1020 NU = 1: VTAB 7: FOR I = 1 TO 6: PRINT TAB( 7)I". "HE$(I): PRINT : NEXT
1040 VTAB 21: PRINT "WHAT IS HEADING #"NU" ?";: GET A$: IF A$ = CHR$(13) AND NU = 1 THEN RETURN
1046 IF A$ = CHR$(13) THEN NU = NU -1: GOTO 1060
1047 A = VAL(A$): IF A <1 OR A >6 THEN PRINT : GOTO 1040
1050 VTAB 5 +(2 *A): HTAB 7: INVERSE : PRINT A: NORMAL :DA$(NU) = HE$(A): IF NU >5 THEN 1060
1057 NU = NU +1: GOTO 1040
1060 HOME : PRINT "THE HEADINGS, IN ORDER, ARE:": VTAB 5: FOR I = 1 TO NU: PRINT DA$(I): PRINT : NEXT
1080 VTAB 21: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ = CHR$(13) THEN RETURN
1090 IF A$ < >"Y" THEN 1000
1100 HOME : PRINT "ENTER THE LENGTH OF EACH FIELD:": FOR I = 1 TO NU
1130 VTAB 3 +(I *2): PRINT I". "DA$(I);: HTAB 25: INPUT "";L$(I): IF LEN(L$(I)) = 0 THEN 1130
1135 L(I) = VAL(L$(I)): IF L(I) = 0 OR L(I) >63 THEN 1130
1140 L = L +L(I) +2: PRINT : NEXT
1150 VTAB 21: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ = CHR$(13) THEN RETURN
1165 IF A$ < >"Y" THEN 1100
1180 HOME : VTAB 5: INPUT "WHAT IS THE NAME OF THE MAGAZINE ?";MN$: IF LEN(MN$) = 0 THEN RETURN
1200 RD = 0
1210 PRINT D$"OPEN HEADER."MN$
1220 PRINT D$"DELETE HEADER."MN$
1230 PRINT D$"OPEN HEADER."MN$
1235 PRINT D$"WRITE HEADER."MN$
1240 PRINT L: PRINT NU
1245 FOR I = 1 TO NU: PRINT DA$(I): PRINT L(I): NEXT
1250 PRINT D$"CLOSE HEADER."MN$
1255 PRINT D$"LOCK HEADER."MN$
1260 PRINT D$"OPEN DATA."MN$",L"L
1270 PRINT D$"WRITE DATA."MN$",R0"
1280 PRINT RD
1290 PRINT D$"CLOSE": RETURN
2000 HOME :A$ = "LOAD A MAGAZINE": GOSUB 60000: VTAB 5
2010 PRINT : PRINT "ENTER THE NAME OF THE MAGAZINE OR ";: INVERSE : PRINT "*": NORMAL : INPUT "TO CATALOG: ";A$: IF A$ = "*" THEN PRINT D$"CATALOG": GOTO 2010
2020 IF LEN(A$) = 0 THEN RETURN
2025 MN$ = A$
2030 PRINT D$"OPEN HEADER."MN$
2040 PRINT D$"READ HEADER."MN$
2050 INPUT L: INPUT NU
2060 FOR I = 1 TO NU: INPUT DA$(I): INPUT L(I): NEXT
2070 PRINT D$"CLOSE HEADER."MN$
2080 PRINT D$"OPEN DATA."MN$",L"L
2090 PRINT D$"READ DATA."MN$",R0"
2100 INPUT RD
2110 PRINT D$"CLOSE"
2120 RETURN
3000 GOSUB 200: HOME :A$ = "ADD A RECORD": GOSUB 60000
3010 VTAB 5: PRINT "FOR EACH RECORD, ENTER THE INFORMATION": PRINT "FOLLOWED BY A RETURN. IF YOU MAKE A": PRINT "MISTAKE, PRESS THE <-- KEY TO ERASE THE": PRINT "PREVIOUS LETTER. IF YOU WANT TO FINISH"
3020 PRINT "ADDING RECORDS, PRESS ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " WHEN ASKED FOR ";DA$(1)"."
3025 PRINT : PRINT "IF AT ANY TIME YOU WISH TO ABORT THE": PRINT "RECORD, PRESS CTRL-R TO RETURN TO MENU."
3030 VTAB 18:A$ = "PRESS ANY KEY TO BEGIN": GOSUB 60000
3040 X = PEEK( -16384): IF X <128 THEN 3040
3055 RD = RD +1: IF RD >500 THEN HOME : VTAB 11: PRINT "YOU CAN'T ENTER ANYMORE RECORDS. IF YOU": PRINT "WANT TO ADD MORE, CREATE ANOTHER FILE.": FOR I = 1 TO 3000: NEXT : RETURN
3060 POKE -16368,0: HOME : PRINT "RECORD #"RD: VTAB 3
3070 FOR I = 1 TO NU:M = LEN(DA$(I)): IF M >K THEN K = M +1
3080 NEXT
3085 FOR X = 1 TO NU: PRINT DA$(X);: HTAB K: PRINT ":";: FOR I = 1 TO L(X): PRINT CHR$(95);: NEXT
3105 IF ( LEN(BB$) = 0 AND X = 1) OR B$ = CHR$(18) THEN RD = RD -1: RETURN
3110 DI$(X) = BB$:BB$ = "": NEXT
3120 VTAB 19: HTAB 1: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: PRINT : IF A$ = CHR$(13) THEN RD = RD -1: RETURN
3125 IF A$ < >"Y" THEN 3060
3151 PRINT D$"OPEN DATA."MN$",L"L
3160 PRINT D$"WRITE DATA."MN$",R"RD
3170 FOR I = 1 TO NU: PRINT CHR$(34);DI$(I): NEXT
3180 PRINT D$"CLOSE"
3195 GOSUB 1260: GOTO 3055
3200 REM ** INPUT ROUTINE **
3210 GET B$: IF B$ = CHR$(13) OR B$ = CHR$(18) THEN RETURN
3220 IF B$ = CHR$(8) THEN 3260
3230 IF B$ < CHR$(32) THEN 3210
3232 IF B$ = CHR$(34) THEN 3210
3233 IF BE = 1 THEN PRINT CHR$(7);: GOTO 3210
3234 BD = 0
3235 IF LEN(BB$) = L(X) THEN PRINT CHR$(7);:BE = 1: GOTO 3210
3240 BB$ = BB$ +B$: PRINT B$;:B$ = "": GOTO 3210
3260 IF BD = 1 THEN PRINT CHR$(7);: HTAB K +1: GOTO 3210
3265 IF LEN(BB$) <2 THEN BB$ = "":BD = 1: GOTO 3280
3270 BB$ = LEFT$(BB$, LEN(BB$) -1)
3280 BE = 0: PRINT CHR$(8); CHR$(95); CHR$(8);: GOTO 3210
4000 GOSUB 200: HOME :A$ = "CHANGE AN ARTICLE": GOSUB 60000: VTAB 5
4006 IF RD = 0 THEN PRINT "THERE ARE NO RECORDS.": FOR I = 1 TO 2000: NEXT : RETURN
4010 INPUT "RECORD # TO CHANGE (-99 FOR ALL) ?";M1$: IF LEN(M1$) = 0 OR VAL(M1$) = 0 THEN RETURN
4025 M1 = VAL(M1$): IF M1 >RD THEN 4000
4030 IF M1 <0 THEN M2 = 1:M3 = RD: GOTO 4050
4040 M2 = M1:M3 = M2
4045 VTAB 9
4050 VTAB 9: PRINT : PRINT "AFTER EACH RECORD, I WILL ASK IF YOU": PRINT "WANT IT CHANGED. IF NOT, I WILL READ IN": PRINT "THE NEXT RECORD. IF YOU DO WANT IT": PRINT "CHANGED, THEN THE CURSOR WILL BE DIS-"
4060 PRINT "PLAYED AT THE BEGINNING OF THE DATA. IF": PRINT "YOU WISH TO SKIP THE DATA, PRESS RETURN": PRINT "TO GO ON TO THE NEXT LINE OR CTRL-R FOR": PRINT "NEXT RECORD. OTHERWISE, ENTER IN DATA."
4090 VTAB 21:A$ = "PRESS ANY KEY TO BEGIN": GOSUB 60000
4170 VTAB 3 +(X *2) +2: PRINT "CHANGE THIS RECORD ?";: GET A$: IF A$ = CHR$(13) THEN RETURN
4190 IF A$ < >"Y" THEN HOME : NEXT : RETURN
4205 PRINT
4210 FOR X = 1 TO NU: VTAB 3 +(2 *X): HTAB K +1:BE = 0:BD = 0: GOSUB 3200
4220 IF B$ = CHR$(13) AND LEN(BB$) = 0 THEN NEXT : GOTO 4250
4230 IF B$ = CHR$(18) THEN X = NU: NEXT : HOME : NEXT : RETURN
4240 DI$(X) = BB$:BB$ = "": NEXT
4250 VTAB 3 +(2 *X) +2: HTAB 1: CALL -958: PRINT "IS THIS CORRECT (Y/N) ?";: GET A$: IF A$ = CHR$(13) THEN RETURN
4270 IF A$ < >"Y" THEN HOME : GOTO 4130
4290 PRINT
4300 PRINT D$"OPEN DATA."MN$",L"L
4310 PRINT D$"WRITE DATA."MN$",R"E
4320 FOR T = 1 TO NU: PRINT CHR$(34);DI$(T): NEXT
4330 PRINT D$"CLOSE"
4340 HOME : NEXT : RETURN
5000 GOSUB 200: HOME :A$ = "DELETE AN ARTICLE": GOSUB 60000: VTAB 5
5015 IF RD = 0 THEN PRINT "THERE ARE NO RECORDS TO DELETE.": FOR I = 1 TO 2000: NEXT : RETURN
5020 PRINT "WHICH RECORD TO ";: FLASH : PRINT "DELETE";: NORMAL : INPUT " ";M3$: IF LEN(M3$) = 0 THEN RETURN
5040 M3 = VAL(M3$): IF M3 <1 OR M3 >RD THEN 5000
5050 PRINT : PRINT "ARE YOU SURE (YES/N)";: INPUT A$: IF A$ < >"YES" THEN RETURN
5060 IF M3 < >RD THEN 5080
5070 RD = RD -1: GOTO 1260
5080 E = RD: GOSUB 6500
5090 PRINT D$"OPEN DATA."MN$",L"L
5100 PRINT D$"WRITE DATA."MN$",R"M3
5110 FOR I = 1 TO NU: PRINT CHR$(34);DI$(I): NEXT
5120 PRINT D$"CLOSE"
5130 GOTO 5070
6000 GOSUB 200: HOME :A$ = "LIST AN ARTICLE(S)": GOSUB 60000: GOSUB 6400
6010 IF PR = 1 THEN PRINT D$"PR#1"
6020 FOR E = M1 TO M2: HOME : PRINT "RECORD #";E: GOSUB 6500: GOSUB 6300
6030 PRINT
6045 PRINT D$"PR#0"
6050 VTAB 3 +(2 *X) +2: INVERSE : PRINT "RETURN TO QUIT OR OTHER TO CONTINUE";: NORMAL : GET A$: IF A$ = CHR$(13) THEN PR = 0: RETURN
6083 IF PR = 1 THEN PRINT : PRINT D$"PR#1"
6085 NEXT
6087 PRINT : PRINT D$"PR#0"
6088 HOME : VTAB 11:A$ = "THAT'S ALL": GOSUB 60000: FOR I = 1 TO 3000: NEXT :PR = 0: RETURN
6300 FOR X = 1 TO NU:M = LEN(DA$(X)): IF M >K THEN K = M +1
6310 NEXT
6315 IF PR = 1 THEN 6330
6320 FOR X = 1 TO NU: VTAB 3 +(2 *X): PRINT DA$(X); TAB( K);":";DI$(X): PRINT : NEXT : RETURN
6330 PRINT : FOR X = 1 TO NU: PRINT DA$(X);: TAB( K - LEN(DA$(X)));":";DI$(X): NEXT : PRINT : PRINT : RETURN
6400 VTAB 5: PRINT "THERE ARE "RD" RECORDS."
6405 IF RD = 0 THEN VTAB 5: PRINT "THERE AREN'T ANY RECORDS TO LIST.": FOR I = 1 TO 3000: NEXT : POP : RETURN
6410 VTAB 7: INPUT "WHAT IS THE STARTING RECORD TO LIST ?";M1$: IF LEN(M1$) = 0 THEN POP : RETURN
6420 IF VAL(M1$) <1 OR VAL(M1$) >RD THEN 6410
6430 M1 = VAL(M1$): VTAB 9: INPUT "WHAT IS THE ENDING RECORD TO LIST ?";M2$: IF VAL(M2$) <M1 OR VAL(M2$) >RD THEN 6430
6440 M2 = VAL(M2$): VTAB 11: PRINT "DO YOU WANT IT ON THE PRINTER ?";: GET A$: PRINT A$: IF A$ < >"Y" AND A$ < >"N" THEN 6440
6450 IF A$ = "Y" THEN PRINT D$"PR#1":PR = 1
6460 RETURN
6500 PRINT D$"OPEN DATA."MN$",L"L
6510 PRINT D$"READ DATA."MN$",R"E
6520 FOR I = 1 TO NU: INPUT DI$(I): NEXT
6530 PRINT D$"CLOSE"
6540 RETURN
7000 HOME :A$ = "FIND/SORT OPTION": GOSUB 60000
7020 VTAB 5: PRINT "DO YOU WANT TO FIND OR SORT (F OR S) ?";: GET A$: IF A$ = CHR$(13) THEN RETURN
7040 IF A$ = "S" THEN 7500
7050 IF A$ < >"F" THEN 7000
7060 GOSUB 200: HOME :A$ = "FIND OPTION": GOSUB 60000
7065 IF RD = 0 THEN VTAB 5: PRINT "THERE ARE NO RECORDS TO FIND ANYTHING.": FOR J = 1 TO 3000: NEXT : RETURN
7070 VTAB 5: INPUT "WHICH STRING TO SEARCH FOR ?";ST$: IF LEN(ST$) = 0 THEN RETURN
7090 VTAB 7: FOR I = 1 TO NU: PRINT I". "DA$(I): PRINT : NEXT
7100 VTAB 23: INPUT "WHICH NUMBER TO SEARCH ON ?";H$:H = VAL(H$): IF H <1 OR H >NU THEN 7100
7125 HOME : GOSUB 6440: IF PR = 1 THEN PRINT D$"PR#1"
7130 PRINT : PRINT D$;"OPEN DATA."MN$",L"L: FOR E = 1 TO RD: HOME : PRINT D$"READ DATA."MN$",R"E: FOR I = 1 TO NU: INPUT DI$(I): NEXT
7140 A$ = DI$(H)
7150 FOR I = 1 TO LEN(A$) - LEN(ST$) +1
7160 IF MID$ (A$,I, LEN(ST$)) = ST$ THEN PRINT "RECORD #"E: GOSUB 6300: GOTO 7180
7170 NEXT : GOTO 7200
7180 PRINT D$"PR#0": VTAB 20: INVERSE : PRINT "RETURN TO EXIT OR OTHER TO CONTINUE";: NORMAL : GET A$: PRINT : IF A$ = CHR$(13) THEN PR = 0: RETURN
7190 IF PR = 1 THEN PRINT : PRINT D$"PR#1"
7200 NEXT E:PR = 0: PRINT D$"PR#0"
7210 HOME : VTAB 12:A$ = "THAT'S ALL!!": GOSUB 60000: FOR I = 1 TO 2000: NEXT : RETURN
7500 GOSUB 200: HOME :A$ = "SORT OPTION": GOSUB 60000: VTAB 4: IF RD <2 THEN PRINT "YOU CAN'T SORT LESS THAN 2 RECORDS.": FOR I = 1 TO 3000: NEXT : RETURN
7510 FOR I = 1 TO NU: PRINT I;". ";DA$(I): PRINT : NEXT
7520 VTAB 23: INPUT "WHICH HEADING TO SORT ON ?";H$: IF LEN(H$) = 0 THEN RETURN
7530 H = VAL(H$): IF H <1 OR H >NU THEN 7520
7535 DIM A$(NU,RD),N$(RD): POKE 768,29
7540 HOME : VTAB 11: HTAB 15: FLASH : PRINT "READING DISK";G$: NORMAL
7550 PRINT D$"OPEN DATA."MN$",L"L
7560 FOR I = 1 TO RD
7570 PRINT D$"READ DATA."MN$",R"I
7580 FOR J = 1 TO H: INPUT N$(I): NEXT :B$ = STR$(I)
7581 IF LEN(B$) = 1 THEN N$(I) = N$(I) +"00": GOTO 7583
7582 IF LEN(B$) = 2 THEN N$(I) = N$(I) +"0"
7583 N$(I) = N$(I) +B$
7590 NEXT
7600 PRINT D$"CLOSE"
7605 HOME : VTAB 11: HTAB 17: FLASH : PRINT "SORTING";G$: NORMAL
7610 FOR I = 1 TO RD -1: FOR J = I +1 TO RD: IF N$(I) < = N$(J) THEN 7630
7620 T$ = N$(I):N$(I) = N$(J):N$(J) = T$
7630 NEXT J,I:Q = 2
7640 HOME : VTAB 6: HTAB 14: FLASH : PRINT "SORT COMPLETED";G$;G$;G$: NORMAL
7650 VTAB 9: PRINT "DO YOU WANT TO SEE THE SORTED LIST ?";: GET A$: PRINT A$: IF A$ < >"Y" THEN 7700
7660 GOSUB 6440: FOR Q = 1 TO RD: HOME : PRINT "RECORD #"Q:E = VAL( RIGHT$(N$(Q),3)): GOSUB 6500: FOR J = 1 TO NU:A$(J,Q) = DI$(J): NEXT : GOSUB 6300: PRINT D$"PR#0"
7670 VTAB 3 +(2 *X) +2: INVERSE : PRINT "RETURN TO QUIT OR OTHER TO CONTINUE";: NORMAL : GET A$: PRINT : IF A$ = CHR$(13) THEN PR = 0:Q = Q +1: GOTO 7700
7680 IF PR = 1 THEN PRINT D$"PR#1"
7690 NEXT
7700 HOME : VTAB 5: PRINT D$;"PR#0": PRINT "DO YOU WANT TO SAVE THE SORTED FILE ?";: GET A$: PRINT A$: IF A$ < >"Y" THEN RUN
7705 HOME : VTAB 11: HTAB 15: FLASH : PRINT "WRITING FILE";G$: NORMAL
7710 PRINT D$"OPEN DATA."MN$",L"L: FOR F = Q -1 TO RD: PRINT D$"READ DATA."MN$",R" VAL( RIGHT$(N$(F),3)): FOR J = 1 TO NU: INPUT A$(J,F): NEXT : NEXT
7720 FOR I = 1 TO RD: PRINT D$"WRITE DATA."MN$",R"I
7730 FOR J = 1 TO NU: PRINT CHR$(34);A$(J,I): NEXT : NEXT
7740 PRINT D$"CLOSE": RUN
8000 ERR = PEEK(222): IF ERR = 255 THEN RESUME
8005 HOME : PRINT D$"PR#0": NORMAL : VTAB 5: PRINT G$
8010 IF ERR = 4 THEN PRINT "DISK IS WRITE-PROTECTED. PLACE ANOTHER IN DISK DRIVE.": GOTO 8200
8020 IF ERR = 5 THEN PRINT "END OF DATA. I BET YOU ENTERED A WRONG FILENAME!!!": PRINT D$;"UNLOCK HEADER."MN$: PRINT D$;"DELETE HEADER."MN$:MN$ = "": GOTO 8200
8030 IF ERR = 6 THEN PRINT "FILE NOT FOUND!! YOU MUST HAVE ENTERED THE WRONG FILENAME!!": GOTO 8200
8040 IF ERR = 8 THEN PRINT "I/O ERROR. CHECK DRIVE DOOR.": GOTO 8200
8050 IF ERR = 9 THEN PRINT "DISK FULL. PLACE ANOTHER IN DISK DRIVE.": GOTO 8200
8060 IF ERR = 10 THEN PRINT "YOU <CTRL-A>ALREADY HAVE A FILE BY THAT NAME.": GOTO 8200
8070 LI = PEEK(218) + PEEK(219) *256: PRINT "ERROR #"ERR" IN LINE #"LI".": PRINT "CHECK APPLESOFT MANUAL, PAGE 136.": END
8200 PRINT : PRINT "PRESS ANY KEY FOR MAIN MENU.";: GET A$: GOTO 100